package com.itheima.controller;

import com.itheima.pojo.PhoneDto;
import com.itheima.pojo.Result;
import com.itheima.pojo.User;
import com.itheima.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private LoginService loginService;

    @Autowired
    private HttpServletRequest request;

    /**
     * 1). 获取短信验证码
     * 业务逻辑：
     * 前端输入电话号码,得到验证码,并且把号码和验证码一起保存在session中
     *
     * @param pd
     * @return
     */
    @PostMapping("/sendMsg")
    public Result loging(@RequestBody PhoneDto pd) {
        //接收参数,过滤参数
        if (pd == null || pd.getPhone().length() != 11) {
            return new Result(0, "号码有误,请重新输入手机号!");
        }
        //调用Service传入号码
        Integer checkCode = loginService.getMsg(pd);
        if (checkCode == 0) {
            return new Result(0, "短信发送失败,请稍后重试!");
        }
        //把验证码存到session中
        HttpSession session = request.getSession();
        //手机号和验证码对应
        session.setAttribute(pd.getPhone(), checkCode);
        System.out.println(checkCode);
        //发送成功,返回状态
        return new Result(1, "验证码发送成功!");
    }

    /**
     * 2). 登录
     * 业务逻辑：
     * 通过一个电话,查询对象存不存在,不存在就注册
     *
     * @return
     */
    @PostMapping("/login")
    public Result Register(@RequestBody PhoneDto pd) {
        //1). 获取前端传递的手机号和验证码
        if (pd == null) {
            return new Result(0, "参数异常");
        }
        // 2). 从Session中获取到手机号对应的正确的验证码
        HttpSession session = request.getSession();
        Integer code = (Integer) session.getAttribute(pd.getPhone());
        // 3). 进行验证码的比对 , 如果比对失败, 直接返回错误信息
        if (code == null) {
            return new Result(0, "没有该手机验证码");
        }
        if (!pd.getCode() .equals(code)) {
            return new Result(0, "验证码错误");
        }
        //4). 如果比对成功, 需要根据手机号查询当前用户, 如果用户不存在, 则自动注册一个新用户
        User user = loginService.loginUser(pd);
        //如果登录成功,清空验证码
        session.setAttribute(pd.getPhone(), null);
        //5). 将登录用户的ID存储Session中
        session.setAttribute("userId", user.getPhone());
        return new Result(1, "登录成功!");
    }
}
